/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import mrp.beans.ProveedorBean;
import mrp.beans.util.JsfUtil;
import mrp.entity.Proveedor;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author root
 */
@ManagedBean(name="proveedorWeb")
@SessionScoped
public class ProveedorWeb implements Serializable{
    
    @ManagedProperty("#{proveedor}")
    private ProveedorBean proveedor;
    
    //_______________________________________________________________________________________________     
    //-----------------Componentes ingresarProveedor.xhtml-----------------------
    private InputText textNumeroProveedor;
    private InputText textCedulaRUCProveedor;
    private InputText textNombreProveedor;
    private InputText textDireccionProveedor;
    private InputText textTelefonoProveedor;
    private InputText textCelularProveedor;      
    //---------------fin Componentes ingresarProveedor.xhtml-----------------------
    
    
    //-----------------Componentes consultarProveedor.xhtml-----------------------     
    
     private InputText textBuscarProveedor;
     private HtmlSelectOneMenu comboBuscarProveedor,comboCoincidenciaBusquedaProveedor;  
     
     
     //Atributos para cargar la tabla
        private List <Proveedor> tablaDatosProveedor;
        private List <String> datosProveedorSeleccionado;
        private Proveedor proveedorSeleccionado;          
    //-----------------fin Componentes consultarProveedor.xhtml-----------------------
        
    
    //-----------------Componentes modificarDatosProveedor.xhtml-----------------------    
        private Proveedor proveedorActualizarDatos;
    //-----------------fin Componentes modificarDatosProveedor.xhtml-----------------------
        
    
    //_______________________________________________________________________________________________       
    //********************metodos Getters and Setters***************************
     public ProveedorBean getProveedor() {
        return proveedor;
    }
    public void setProveedor(ProveedorBean proveedor) {
        this.proveedor = proveedor;
    }
    
    //-----------------Getters and Setters ingresarProveedor.xhtml-----------------------
            public InputText getTextCedulaRUCProveedor() {
                return textCedulaRUCProveedor;
            }
            public void setTextCedulaRUCProveedor(InputText textCedulaRUCProveedor) {
                this.textCedulaRUCProveedor = textCedulaRUCProveedor;
            }
            public InputText getTextCelularProveedor() {
                return textCelularProveedor;
            }
            public void setTextCelularProveedor(InputText textCelularProveedor) {
                this.textCelularProveedor = textCelularProveedor;
            }
            public InputText getTextDireccionProveedor() {
                return textDireccionProveedor;
            }
            public void setTextDireccionProveedor(InputText textDireccionProveedor) {
                this.textDireccionProveedor = textDireccionProveedor;
            }
            public InputText getTextNombreProveedor() {
                return textNombreProveedor;
            }
            public void setTextNombreProveedor(InputText textNombreProveedor) {
                this.textNombreProveedor = textNombreProveedor;
            }
            public InputText getTextNumeroProveedor() {
                return textNumeroProveedor;
            }
            public void setTextNumeroProveedor(InputText textNumeroProveedor) {
                this.textNumeroProveedor = textNumeroProveedor;
            }
            public InputText getTextTelefonoProveedor() {
                return textTelefonoProveedor;
            }
            public void setTextTelefonoProveedor(InputText textTelefonoProveedor) {
                this.textTelefonoProveedor = textTelefonoProveedor;
            }

    //-----------------fin Getters and Setters ingresarProveedor.xhtml--------------------
    
    //-----------------Getters and Setters consultarProveedor.xhtml----------------------- 
            public HtmlSelectOneMenu getComboBuscarProveedor() {
                return comboBuscarProveedor;
            }
            public void setComboBuscarProveedor(HtmlSelectOneMenu comboBuscarProveedor) {
                this.comboBuscarProveedor = comboBuscarProveedor;
            }
            public HtmlSelectOneMenu getComboCoincidenciaBusquedaProveedor() {
                return comboCoincidenciaBusquedaProveedor;
            }
            public void setComboCoincidenciaBusquedaProveedor(HtmlSelectOneMenu comboCoincidenciaBusquedaProveedor) {
                this.comboCoincidenciaBusquedaProveedor = comboCoincidenciaBusquedaProveedor;
            }
            public List<String> getDatosProveedorSeleccionado() {
                return datosProveedorSeleccionado;
            }
            public void setDatosProveedorSeleccionado(List<String> datosProveedorSeleccionado) {
                this.datosProveedorSeleccionado = datosProveedorSeleccionado;
            }
            public Proveedor getProveedorSeleccionado() {
                return proveedorSeleccionado;
            }
            public void setProveedorSeleccionado(Proveedor proveedorSeleccionado) {
                this.proveedorSeleccionado = proveedorSeleccionado;
            }
            public List<Proveedor> getTablaDatosProveedor() {
                return tablaDatosProveedor;
            }
            public void setTablaDatosProveedor(List<Proveedor> tablaDatosProveedor) {
                this.tablaDatosProveedor = tablaDatosProveedor;
            }
            public InputText getTextBuscarProveedor() {
                return textBuscarProveedor;
            }
            public void setTextBuscarProveedor(InputText textBuscarProveedor) {
                this.textBuscarProveedor = textBuscarProveedor;
            }
      //-----------------Fin Getters and Setters consultarProveedor.xhtml----------------------- 
    
      //-----------------Getters and Setters modificarDatosProveedor.xhtml-----------------------            
            public Proveedor getProveedorActualizarDatos() {
                return proveedorActualizarDatos;
            }
            public void setProveedorActualizarDatos(Proveedor proveedorActualizarDatos) {
                this.proveedorActualizarDatos = proveedorActualizarDatos;
            }           
     //-----------------Fin Getters and Setters modificarDatosProveedor.xhtml-----------------------       
            
   //******************fin de metodos Getters and Setters**********************

//_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
    public void setImputText(String form, String [] componente)// setea los imputText de vistas de ingresarVendedor.xhtml y modificarDatosVendedor.xhtml con los componentes de esta clase
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextNumeroProveedor((InputText)root.findComponent(form).findComponent(componente[0]));
       this.setTextCedulaRUCProveedor((InputText)root.findComponent(form).findComponent(componente[1]));
       this.setTextNombreProveedor((InputText)root.findComponent(form).findComponent(componente[2]));
       this.setTextDireccionProveedor((InputText)root.findComponent(form).findComponent(componente[3]));
       this.setTextTelefonoProveedor((InputText)root.findComponent(form).findComponent(componente[4]));
       this.setTextCelularProveedor((InputText)root.findComponent(form).findComponent(componente[5]));                     
    }
    public void resetComponentes()
    {        
        try{                  
                this.getTextNumeroProveedor().setValue("");
                this.getTextCedulaRUCProveedor().setValue("");                
                this.getTextNombreProveedor().setValue("");  
                this.getTextDireccionProveedor().setValue("");
                this.getTextTelefonoProveedor().setValue("");      
                this.getTextCelularProveedor().setValue("");                                       
            }catch(java.lang.NullPointerException npe)
            {
                System.out.println("-------------Excepcion en resetComponentes() "+npe);
            }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String metodo)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(metodo.equals("ingresarProveedor")||metodo.equals("modificarProveedor"))
        {
            listaComponentesEstilos.add(" width: 150px;left: 160px; top: 54px; position: absolute; font-size: 12px ");
            listaComponentesEstilos.add(" width: 150px;left: 160px; top: 84px; position: absolute; font-size: 12px ");
            listaComponentesEstilos.add(" width: 400px;left: 160px; top: 114px; position: absolute; font-size: 12px ");
            listaComponentesEstilos.add(" width: 400px;left: 160px; top: 144px; position: absolute; font-size: 12px ");
            listaComponentesEstilos.add(" width: 150px;left: 160px; top: 174px; position: absolute; font-size: 12px ");
            listaComponentesEstilos.add(" width: 150px;left: 160px; top: 204px; position: absolute; font-size: 12px ");            
        }
        else if(metodo.equals("consultarProveedor")){
            listaComponentesEstilos.add("font-size: 12px");
            listaComponentesEstilos.add("font-size: 12px;height: 25px;alignment-baseline: middle; ");
            listaComponentesEstilos.add("font-size: 12px;height: 25px;alignment-baseline: middle; ");
        }
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String metodo)
    {
        if(metodo.equals("ingresarProveedor")||metodo.equals("modificarProveedor"))
        {
            this.getTextNumeroProveedor().setStyle(listaComponentesEstilos.get(0).toString());
            this.getTextCedulaRUCProveedor().setStyle(listaComponentesEstilos.get(1).toString());            
            this.getTextNombreProveedor().setStyle(listaComponentesEstilos.get(2).toString());
            this.getTextDireccionProveedor().setStyle(listaComponentesEstilos.get(3).toString());
            this.getTextTelefonoProveedor().setStyle(listaComponentesEstilos.get(4).toString());
            this.getTextCelularProveedor().setStyle(listaComponentesEstilos.get(5).toString());           
        }
        else if(metodo.equals("consultarProveedor"))
        {
            this.getTextBuscarProveedor().setStyle(listaComponentesEstilos.get(0).toString());
            this.getComboBuscarProveedor().setStyle(listaComponentesEstilos.get(1).toString());
            this.getComboCoincidenciaBusquedaProveedor().setStyle(listaComponentesEstilos.get(2).toString());
        }                
    }
    public boolean esCamposVacios(List<Object>listaComponentes, String metodo)
    {
        boolean vacio=false;
        
        if(metodo.equals("ingresarProveedor")||metodo.equals("modificarProveedor"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
            for(int i=1;i<listaComponentes.size();i++) // empieza en 1 porque el campo numeroProveedor se genera automaticamente al almacenar en la base de datos un nuevo registro
            {
                boolean isEmpty=true;
                try{
                    isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty();                    
                    if(i==1)
                    {
                        int length=((InputText)listaComponentes.get(i)).getValue().toString().length();
                        if(!(length==10||length==13))
                        {
                            isEmpty=true;
                            this.proveedor.mostrarMensaje("error","El numero de cedula o RUC es incorrecto", "cedula o RUC es incorrecto");
                        }
                    }
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                if(isEmpty)
                {
                    ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    vacio=true;
                }
            }
        }
        else if(metodo.equals("consultarProveedor"))
        {
            if(this.getComboBuscarProveedor().getValue().equals("0"))
            {                
                this.getComboBuscarProveedor().setStyle(this.getComboBuscarProveedor().getStyle()+";border-color: crimson;background-color: crimson");
                this.proveedor.mostrarMensaje("error", "Seleccione un criterio para la búsqueda", ""); 
                vacio= true;        
            }
        }
        return vacio;
    }
    
  //_______________________________________________________________________________________________               
  //*********************Metodos ingresarProveedor.xhtml************************
  public void clicBotonResetearIngresarProveedor()
   {
       String form="formIngresoProveedor";
       String[] componentes={"textNumeroProveedor","textCedulaRUCProveedor","textNombreProveedor","textDireccionProveedor","textTelefonoProveedor","textCelularProveedor"};     
       this.setImputText(form, componentes);
       String metodo="ingresarProveedor";
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(metodo), metodo);       
       this.resetComponentes();
   }
   public void clicBotonIngresarProveedor() ///boton guardar Proveedor
   {
       String form="formIngresoProveedor";
       String[] componentes={"textNumeroProveedor","textCedulaRUCProveedor","textNombreProveedor","textDireccionProveedor","textTelefonoProveedor","textCelularProveedor"};     
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="ingresarProveedor";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextNumeroProveedor());
       listaComponentes.add( this.getTextCedulaRUCProveedor());       
       listaComponentes.add( this.getTextNombreProveedor());  
       listaComponentes.add( this.getTextDireccionProveedor());
       listaComponentes.add( this.getTextTelefonoProveedor());      
       listaComponentes.add( this.getTextCelularProveedor());       
      
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       //System.out.println("List<String>listaComponentesEstilos----- "+listaComponentesEstilos.get(0));
       if(!this.esCamposVacios(listaComponentes,metodo))
       {           
           this.proveedor.setProveedor(new Proveedor("",this.getTextCedulaRUCProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextNombreProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextDireccionProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextTelefonoProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextCelularProveedor().getValue().toString().trim().toUpperCase()));
            if(this.proveedor.ingresarProveedor())
            {
                this.resetComponentes();
            }               
       }
       else
       {
           this.proveedor.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");
           //this.mostrarConfirmDialogo("Ingresar Cliente", "Error: Datos requeridos deben ser llenados");
       }
   }          
   //*********************fin Metodos ingresarProveedor.xhtml************************
   
   
   //*********************Metodos consultarProveedor.xhtml***********************
   public void clicBotonConsultarProveedor()//metodo del toolbarProveedor.xhtml
   {
      try{
            if((!this.getTablaDatosProveedor().isEmpty()))
            {
                this.clicBotonBuscarProveedor();
            }
       }
       catch(Exception e){
            System.out.println("Exception en metodo clicBotonConsultarProveedor() "+e);
       } 
   }
public void eventoFilaSeleccionadaTablaConsultarProveedor() 
{//metodo carga los datos del ultimo vendedor seleccionado en el caso que se deseen actualizar
    Proveedor pr=(Proveedor)this.getProveedorSeleccionado();      
    this.setProveedorActualizarDatos(pr);       
    System.out.println("eventoFilaSeleccionadaTablaConsultarProveedor "+pr.getNumeroProveedor());
}
   public void clicBotonBuscarProveedor()//metodo del botonBuscarProveedor de consultarProveedor.xhtml
   {
       String metodo="consultarProveedor";
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);  
       
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextBuscarProveedor());
       listaComponentes.add( this.getComboBuscarProveedor());
       listaComponentes.add( this.getComboCoincidenciaBusquedaProveedor());
       
       if(!this.esCamposVacios(listaComponentes, metodo))
       {
           List <List> datos=this.getProveedor().consultarProveedor(this.getTextBuscarProveedor().getValue().toString(),this.getComboBuscarProveedor().getValue().toString(),this.getComboCoincidenciaBusquedaProveedor().getValue().toString());
           this.setTablaDatosProveedor(datos.get(0));          
           //this.proveedor.mostrarMensaje("info", "jejejejjee"+metodo, metodo);
       }       
   }
   public void mostrarDatosDialogoDatosProveedor()
   {
        Proveedor ve=(Proveedor)this.getProveedorSeleccionado();
        List<String> datos=new ArrayList<String>();
        datos.add("   Proveedor Numero:"+ve.getNumeroProveedor());
        datos.add("       Cedula / RUC:"+ve.getNumeroCedulaRUC());
        datos.add("   Nombre Proveedor:"+ve.getNombreProveedor());
        datos.add("          Dirección:"+ve.getDireccion());
        datos.add("      Teléfono Fijo:"+ve.getTelefono());
        datos.add("   Teléfono Celular:"+ve.getTelefonoCelular());
        
        this.setDatosProveedorSeleccionado(datos);  
       
   }
   //*********************fin Metodos consultarProveedor.xhtml***********************
   
   //*********************Metodos modificarDatosProveedor.xhtml***********************
   public void clicBotonActualizarDatosProveedor()
   {
       String form="formActualizarDatosProveedor";
       String[] componentes={"textNumeroProveedor","textCedulaRUCProveedor","textNombreProveedor","textDireccionProveedor","textTelefonoProveedor","textCelularProveedor"};            
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarProveedor";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextNumeroProveedor());
       listaComponentes.add( this.getTextCedulaRUCProveedor());
       listaComponentes.add( this.getTextNombreProveedor());  
       listaComponentes.add( this.getTextDireccionProveedor());
       listaComponentes.add( this.getTextTelefonoProveedor());      
       listaComponentes.add( this.getTextCelularProveedor());       
      
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       if(!this.esCamposVacios(listaComponentes,metodo))
       {
           
           this.proveedor.setProveedor(new Proveedor(   this.getTextNumeroProveedor().getValue().toString(),
                                                        this.getTextCedulaRUCProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextNombreProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextDireccionProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextTelefonoProveedor().getValue().toString().trim().toUpperCase(),
                                                        this.getTextCelularProveedor().getValue().toString().trim().toUpperCase()));
            System.out.println("--------______Componentes no vacios");    
            if(this.proveedor.modificarDatosProveedor())
            {
                this.resetComponentes();
                JsfUtil.redirect("consultarProveedores.xhtml");
            }            
       }
       else
       {
           this.proveedor.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");
           //this.mostrarConfirmDialogo("Ingresar Cliente", "Error: Datos requeridos deben ser llenados");
       }
   }      
   //*********************Metodos modificarDatosProveedor.xhtml***********************
   
   
   //*************************Metodos eliminarProveedor.xhtml**************************
   public void clicBotonEliminarProveedor()
    {
        System.out.println("clicBotonEliminarProveedor Proveedor para Eliminar: "+this.getProveedorActualizarDatos().getNumeroProveedor());
        String datosProveedorEliminar=this.getProveedorActualizarDatos().getNumeroProveedor();
        if(this.proveedor.eliminarProveedor(this.getProveedorActualizarDatos().getNumeroProveedor()))
        {
            this.proveedor.mostrarMensaje("info", "Se ha eliminado proveedor:"+datosProveedorEliminar,"");
            this.clicBotonBuscarProveedor();//recarga la tabla de datos de los clientes
            System.out.println("Proveedor Eliminado: "+datosProveedorEliminar);
        }
        else
        {
            this.proveedor.mostrarMensaje("error", "No se pudo eliminar proveedor: " +datosProveedorEliminar,"");
             System.out.println("No se pudo eliminar proveedor: "+datosProveedorEliminar);
        }
    }
   //*************************fin eliminarProveedor.xhtml**************************
   
}
